#define MAX(a, b) ((b) > (a) ? (b) : (a))
int lengthOfLongestSubstring(char* s)
{
    int ans = 0, left = 0;
    bool has[128] = {}; // 也可以用哈希表，这里为了效率用的数组
    for (int right = 0; s[right]; right++)
    {
        char c = s[right];
        // 如果窗口内已经包含 c，那么再加入一个 c 会导致窗口内有重复元素
        // 所以要在加入 c 之前，先移出窗口内的 c
        while (has[c])
        { // 窗口内有 c
            has[s[left++]] = false; // 缩小窗口
        }
        has[c] = true; // 加入 c
        int len = right - left + 1;
        ans = MAX(ans, len); // 更新窗口长度最大值
    }
    return ans;
}